/**
 * 玩家常用爬名的格式来判断bot的类型，为了避免被发现是同一个bot，我们应该提供丰富的命名方式
 */

import { generateId } from '@/ayaka'
import { genshinRoles } from '@/modules/genshin/roleData'
import { SpawnTask } from './types'

/**
 * 原神命名法
 */
const createNameByGenshin = (task: SpawnTask, len = 5) => {
    const role = _.sample(genshinRoles)
    return `${generateId(len)}-${role}-${generateId(len)}`
}

/**
 * 16进制命名法
 */
const createNameByHex = (task: SpawnTask, len = 8) => {
    return '0x' + Math.random().toString(16).slice(-len).toUpperCase()
}

/**
 * 角色名命名法
 */
const createNameByRole = (task: SpawnTask, len = 7) => {
    return `${task.role} ${generateId(len)}`
}

/**
 * 命名策略，不必考虑重名问题，因为重名会导致孵化失败，孵化任务会被清除
 */
export const creepNameStrategy = {
    genshin: createNameByGenshin,
    hex: createNameByHex,
    role: createNameByRole,
}

/**
 * 创建爬名，默认原神命名法
 */
export const createCreepName = (task: SpawnTask) => {
    const strategy = Memory.meta?.creepName?.[0] ?? 'genshin'
    const len = Memory.meta?.creepName?.[1]
    return creepNameStrategy[strategy]?.(task, len) || createNameByGenshin(task)
}
